<?php

$workers = [];  // 存放子进程的数组  进程仓库
$worker_num = 2; // 子进程数量 最大进程数


// 批量创建子进程 
for($i=0;$i<$worker_num;$i++){
    $process = new swoole_process('doProcess', false, false);  //创建子进程完成之后，会执行doProcess函数
    $process->useQueue(); // 开启消息队列
    $pid = $process->start(); // 启动子进程
    $workers[$pid] = $process; // 存入进程仓库
}

//进程执行函数
function doProcess(swoole_process $process){
    $recv = $process->pop(); // 获取消息队列中的数据  //8192是队列的容量大小  
    echo "从主进程获取到的数据: $recv \n";
    sleep(5);
    $process->exit(); // 退出子进程
}

//主进程 向子进程添加数据
foreach($workers as $pid => $process) {
    $data = "hello 子进程 $pi \n"; // 添加数据
    $process->push($data); // 向子进程添加数据

}

// 等待 子进程结束 回收资源
for($i=0, $i<$worker_num; $i++) {
    $ret = swoole_process::wait(); // 等待子进程结束
    $pid = $ret['pid']; // 获取子进程的pid
    unset($workers[$pid]); // 删除进程仓库中的数据
    echo "子进程退出 $pid \n";
}